package br.com.datasun.biblioteca.delegate;

import java.util.List;

import br.com.datasun.biblioteca.entities.Assunto;
import br.com.datasun.biblioteca.entities.Autor;
import br.com.datasun.biblioteca.entities.Biblioteca;
import br.com.datasun.biblioteca.entities.Categoria;
import br.com.datasun.biblioteca.entities.Editora;
import br.com.datasun.biblioteca.entities.Estado;
import br.com.datasun.biblioteca.entities.Exemplar;
import br.com.datasun.biblioteca.entities.Livro;
import br.com.datasun.biblioteca.entities.PessoaFisica;
import br.com.datasun.biblioteca.exceptions.BusinessException;
import br.com.datasun.biblioteca.exceptions.ExemplarBibliotecaNaoInformadaException;
import br.com.datasun.biblioteca.exceptions.ExemplarIdInvalidoException;
import br.com.datasun.biblioteca.exceptions.ExemplarIndisponivelException;
import br.com.datasun.biblioteca.exceptions.ExemplarInexistenteException;
import br.com.datasun.biblioteca.exceptions.ExemplarLivroNaoInformadoException;
import br.com.datasun.biblioteca.facade.ConsultasFacade;

public class ConsultasDelegate {
	private ConsultasFacade consultasFacade = new ConsultasFacade();
	
	public List<Assunto> listarTodosAssuntos() throws BusinessException{
		return consultasFacade.listarTodosAssuntos();
	}
	
	public List<Editora> listarTodasEditoras() throws BusinessException{
		return consultasFacade.listarTodasEditoras();
	}
	
	public List<Biblioteca> listarTodasBibliotecas() throws BusinessException{
		return consultasFacade.listarTodasBibliotecas();
	}
		
	public List<Estado> listarTodosEstadosComCidades () throws BusinessException{
		return consultasFacade.listarTodosEstadosComCidades();
	}
	
	public List<Livro> listarTodosLivros() throws BusinessException{
		return consultasFacade.listarTodosLivros();
	}
	
	public List<PessoaFisica> listarTodosClientes() throws BusinessException {
		return consultasFacade.listarTodosClientes();
	}
	
	public List<PessoaFisica> consultarClientes(String nNome, String nEmail,String nCPF,String nRG) throws BusinessException{
		  return consultasFacade.consultarClientes(nNome, nEmail, nCPF, nRG);
	}
	
	public Exemplar getExemplarPorId(Long idExemplar) throws BusinessException, ExemplarInexistenteException,ExemplarIndisponivelException{
		return consultasFacade.getExemplarPorId(idExemplar);
	}
	
	public Exemplar getExemplarPorId(String idExemplar) throws BusinessException, ExemplarInexistenteException,ExemplarIndisponivelException, ExemplarIdInvalidoException{
		return consultasFacade.getExemplarPorId(idExemplar);
	}
	
	public List<Exemplar> listarTodosExemplaresPorLivroEBiblioteca(Livro livro, Biblioteca biblioteca)throws BusinessException, ExemplarLivroNaoInformadoException,ExemplarBibliotecaNaoInformadaException{
		return consultasFacade.listarTodosExemplaresPorLivroEBiblioteca(livro, biblioteca);
	}
	
	public List<Exemplar> listarTodosExemplaresPorLivro(Livro livro)throws BusinessException, ExemplarLivroNaoInformadoException{
		return consultasFacade.listarTodosExemplaresPorLivro(livro);
	}

	public List<Livro> listarLivrosCom(String isbn , String titulo, String autor,String editora, String assunto, String categoria )throws BusinessException {
		return  consultasFacade.listarLivrosCom( isbn , titulo, autor, editora, assunto,categoria );
	}

	public List<Categoria> listarTodasCategorias() throws BusinessException{
		return consultasFacade.listarTodasCategorias();
	}
	
	public List<Autor> listarAutoresDisponiveis(Long idAutor) throws BusinessException{
		return consultasFacade.listarAutoresDisponiveis(idAutor);
	}
}
